Ö INN einrichten |
| | | | | Blog | Sitemap | Suchen | Webmaster | |
Der eigene Newsserver
INN installieren und konfigurieren
(Dokument als PDF)
Der Wegfall von news.individual.net als kostenloser Server für USENET News mag den einen oder anderen Benutzer des Servers motiviert haben, sich selber mit News zu versorgen. Dieser Text soll dabei helfen, etwa auf einem der üblichen Dedicated Server bei einem Hoster oder an einer anderen geeigneten Stelle im Netz einen eigenen INN als News-Server aufzusetzen und so zu konfigurieren, daß er ein nützlicher Teil der USENET-Infrastruktur in Deutschland ist und daß einige Benutzer dort News lesen können.
Inhaltsverzeichnis
Die Gruppen im deutschsprachigen Teil des USENET haben das Prefix de.*. Lediglich im Teil de.alt.dateien.* dürfen Bild- und Programmdateien veröffentlicht werden und so kommt es, daß sich das Verkehrsaufkommen im Restteil de.*,!de.alt.dateien.* in recht engen Grenzen hält: Pro Tag sind etwa 20 MB Traffic einzuplanen. Internationale Gruppen können ein Verkehrsaufkommen zwischen 150 und 200 MB am Tag erzeugen.
Die Maschine, auf der INN-Server laufen soll, sollte eine feste IP-Nummer haben, die unterbrechungsfrei verfügbar ist. Es sind Setups denkbar, in denen einer der beiden am Austausch beteiligten Partner eine wechselnde oder nur mit Unterbrechungen verfügbare Adresse hat, aber diese sind nicht Gegenstand dieser Dokumentation.
Ein laufender innd auf einem Intel-basierenden Suse-Linux-System verbraucht 12 MB RAM für den innd, den eigentlichen Newsserver. Außerdem werden noch ein innfeed-Prozeß (2 MB RAM) zur Artikelweitergabe und einige Hilfsprozesse für statistische Zwecke und zur Ausführung von Wartungsarbeiten gestartet. Alles in allem werden 25-30 MB RAM verbraucht.
Die Speicherung der Artikel erfolgt am günstigsten in sogenannten CNFS Cyclebuffs. Dabei handelt es sich um Ringpuffer-Dateien fester Größe, sodaß der Speicherbedarf für Artikel auf der Festplatte konstant ist. Die Installation des Autors hat jeweils ein halbes Gigabyte für de.*,!de.alt.dateien.* und für regionale deutschsprachige Hierarchien reserviert. Drei Gigabyte sind für internationale Artikel aus den Big8-Hierarchien bereitgestellt.
INN muß für lesenden Zugriff auf die Artikel eine Overview-Datenbank pflegen. Diese belegt etwa 10% des Speichers, der für Artikel belegt wird, zusätzlich.
Der CPU-Aufwand und die IO-Last auf dem Server des Autors sind vernachlässigbar. Dazu trägt die Verwendung von CNFS ganz erheblich bei.
NNTP und NNRP, die Protokolle zum Übertragen von News und zum Lesen von News, verwenden standardmäßig den Port 119/TCP.
Der Autor verwendet Suse Linux 9.1 als Grundlage für diese Installation. Sie ist jedoch auf allen Linux-Distributionen grundsätzlich ähnlich.
Suse Linux 9.1 liefert im Paket inn einen INN in der Version 2.4.1. Dies ist relativ aktuell. Nach der Installation befinden sich die Konfigurationsdateien in /etc/news, die öffentlichen Programme in /usr/bin, die nichtöffentlichen Programme in /usr/lib/news/bin, einige wichtige Arbeitsdateien in /var/lib/news und der Artikelspeicher wird in /var/spool/news angelegt. INN wird nach /var/log/news loggen.
Andere Distributionen verwenden möglicherweise leicht unterschiedliche Speicherorte, die Anleitung ist dann passend abzuwandeln.
Alle Konfiguration am INN ist immer als User “news” durchzuführen und niemals als User “root”, außer dies wird ausdrücklich gesagt. Sobald durch Änderungen als “root” Konfigurations-, Log- oder andere Dateien einem anderen Benutzer als “news” gehören, wird INN möglicherweise nicht mehr sauber funktionieren.
Man
muß also als “root” das Kommando “su –
news” (“su”, Leerzeichen, “Minus”,
Leerzeichen, “news”) eingeben, um auf den Useraccount von
“news” zu wechseln und auch das Environment des
“news”-Users zu bekommen. Danach befindet man sich dann auch
gleich im Homeverzeichnis des News-Users. In SuSE Linux ist das
“/etc/news”, wo sich auch die im folgenden beschriebenen
Konfigurationsdateien befinden.
In unserer Beispielinstallation soll der INN mit einem Artikelspeicher in CNFS (“Cyclic News File System”) betrieben werden, weil dies die ressourcensparendste und wartungsärmste Art der Artikelspeicherung ist. Die CNFS-Puffer müssen konfiguriert und angelegt werden.
Versäumt man das, verwendet INN den in der Default-Konfiguration definierten Traditional Spool. Dieser erzeugt jedoch mehr I/O-Last auf dem System und ist in der Größe variabel. Dafür steht sein Inhalt Skripten leichter zu Verfügung: Artikel werden als Dateien unterhalb von /var/spool/news/articles/ in Verzeichnissen abgelegt, die aus dem Namen der Newsgroup abgeleitet sind und müssen durch einen Aufräumjob (“expire”) von dort gelöscht werden. Die Verwendung von Traditional Spool ist nicht empfohlen, insbesondere nicht für INN Neueinsteiger.
Die
Puffer werden in der Datei “cycbuff.conf” definiert. Eine
Pufferdefinition besteht aus einer oder mehreren Zeilen, von denen jede
einen “cycbuff” definiert. Diese Puffer müssen dann
zu einem “metacycbuff” zusammengeklebt werden, damit sie
durch den INN benutzbar werden.
Leider ist INN bei der Benennung der “cycbuff” und “metacycbuff” sehr eingeschränkt: Namen müssen kurz sein und dürfen nur aus Zahlen und Buchstaben bestehen.
Im Beispiel wird ein “cycbuff” mit dem Namen “DE1” definiert, der 524288 KB (512 MB) groß sein soll. Die Location im Dateisystem für diesen Puffer ist /var/spool/news/cycbuffs/file_de.1. Dort muß diese Datei auch angelegt werden. Dies erfolgt mit dem Kommando “dd”.
INN
selber arbeitet immer nur mit “metacycbuffs”. Ein
“metacycbuff” faßt dabei einen oder mehrere
einzelne “cycbuff” zu einer für den INN benutzbaren
Einheit zusammen. Der “metacycbuff” DE besteht dabei
ausschließlich aus dem einzelnen cycbuff “DE1”.
Das Beispiel definiert außerdem noch sechs jeweils 512 MB umfassende cycbuffs INTL1 bis INTL6. Auch diese müssen mit entsprechenden “dd”-Kommandos angelegt werden und können dann alle zusammen zu einem “metacycbuff” INTL mit 3 GB Gesamtgröße zusammengefaßt werden.
Damit INN weiß, welche Artikel in welchem Puffer abgelegt werden sollen, müssen in der storage.conf entsprechende Einträge gemacht werden.
Die
Zeile “newsgroups” legt dabei fest, welche Gruppen in
welchem Puffer abgelegt werden. Die Zeile “class” ist
eine eindeutige Nummer für jeden Eintrag, damit man an anderer
Stelle auf den Eintrag Bezug nehmen kann. Die Zeile “options”
legt für CNFS-Einträge fest, welcher “metacycbuff”
Speicher für den entsprechenden Eintrag bereitstellen soll.
Im Beispiel wandern Artikel für die Newsgroups “de.*” immer in den CNFS-Speicher “DE” mit der eindeutigen Nummer 3. Alle anderen Artikel wandern in den CNFS-Speicher “INTL” mit der Nummer 2.
Der Eintrag 1 definiert einen Speicher im Format tradspool. Er wird niemals verwendet, weil der Eintrag 2 vorher alle Artikel abfängt. Der Eintrag 1 ist der (nicht empfohlene, aber rückwärtskompatible) Default-Eintrag in der storage.conf von INN.
Sobald INN erst einmal gestartet ist (siehe unten), werden die Puffer initialisiert. Zu einem späteren Zeitpunkt kann man dann mit dem Kommando “cnfsstat -a” ansehen, wie ausgelastet die Puffer sind.
Vor dem ersten Start des Servers ist die /etc/news/inn.conf anzupassen.
Zu ändern sind:
Definiert
den Inhalt der Zeile “Organization”, die Bestandteil
eines jeden Artikels ist.
Definiert,
was Deine Site in den Path-Header einträgt. Dies ist ein sehr
wichtiges Datum für das Peering mit anderen Sites. Es sollte
Dein Domainname sein, oder ein vom Domainnamen abgeleiteter Name wie
“news.koehntopp.de” für “koehntopp.de”.
Mit Hilfe des “pathhost” erkennt ein entfernter Server, ob ein bestimmter Artikel schon einmal Dein System passiert hat. Wenn ja, wird Dir der Artikel kein zweites Mal angeboten. Dies kann sehr viel Traffic einsparen, wenn man mehrere Feeds für eine Hierarchie hat.
Definiert
den Inhalt der Headerzeile “X-Complaints-To” und die
Domain, mit deren Hilfe Usernamen zu Mailadressen komplettiert
werden, wenn dies notwendig ist.
Dieser
Eintrag ist optional. Wenn man jedoch später statistische
Auswertungen auf dem System für den Betrieb plant, sollten
laufende Meßdaten für die Auslastung der CNFS-Puffer
vorliegen. Dazu muß dieser Eintrag aktiv geschaltet sein.
INN muß in regelmäßigen Abständen einige Wartungsaufgaben erledigen. Daher sollte für den User “news” eine Crontab wie die folgende definiert sein:
Die
Crontab enthält nur die für den Betrieb unmittelbar
notwendigen Einträge in aktivierter Form. Die auskommentierten
Einträge sind für spätere Erweiterungen notwendig oder
nützlich.
Der Eintrag “news.daily” führt die zum Betrieb von INN notwendigen Wartungsaufgaben durch. Er muß einmal pro Tag ausgeführt werden.
Der Eintrag “rnews- U” kann einmal pro Stunde ausgeführt werden. Er dient dazu, während Betriebspausen aufgelaufene Artikel nachträglich ins System einzuspeisen.
Die beiden Einträge “inpaths!” und “sendinpaths” sind nur notwendig, wenn das System Statistikdaten in die “Top 1000 der Newsserver” einspielen will. Damit das funktioniert sind jedoch noch weitere Konfigurationen notwendig (siehe unten).
Der Eintrag “scanlogs norotate” dient dazu, stündlich den Statistikreport für das laufende System zu aktualisieren. Damit das funktioniert sind jedoch noch weitere Konfigurationen notwendig (siehe unten).
Mit der angegebenen Konfiguration sollte der INN durch den Systemadministrator startbar sein.
Das
Kommando “chkconfig inn on” sorgt dafür, daß
beim Systemstart automatisch auch der INN mit hochgefahren wird.
Das Kommando “rcinn start” fährt den Server manuell hoch. Der Server sollte Startmeldungen in /var/log/news/news.notice hinterlassen und in der Prozeßliste sollte ein Prozeß “innd” erkennbar sein, der mit den Rechten des Users “news” ausgeführt wird. Mit “lsof -i -P” sollte dieser Prozeß auf Port 119 lauschen. Von localhost aus kann man jetzt einen Testconnect gegen den NNTP-Port machen.
Wenn
das funktioniert, ist der Server erfolgreich grundkonfiguriert und
hochgefahren.
Der Server läuft nun und hat einige Standard-Newsgroups, die für die interne Verwaltung des Servers notwendig sind. Um die weitere Funktion des Servers zu testen, ist es notwendig, mindestens eine lokale Testgruppe anzulegen.
Die anderen benötigten Gruppen kann man leicht anlegen, indem man sich eine Liste der Gruppen beim zukünftigen Upstream-Server abholt und sie in Kommandos zur Gruppeneinrichtung umwandelt.
Das
Kommando getlist holt die Liste der aktiven Gruppen vom Server
news.koehntopp.de ab und legt sie in der Datei
active.news.koehntopp.de ab. Durch das grep-Kommando werden aus
dieser Datei alle Gruppen der Hierarchie de.* extrahiert. Für
die Einrichtung der Gruppen sind nur das erste und vierte Feld einer
jeden Zeile notwendig. Mit dem awk-Kommando ziehen wir also diese
Felder aus der Datei heraus und wandeln sie in “ctlinnd”-Kommandos
um.
Die
Datei “einrichten.sh” enthält nun die benötigten
Kommandos zur Gruppeneinrichtung. Die Ausführung der Datei ist
sehr viel schneller, wenn man den Server vor der Ausführung der
Kommandos in einen Standby-Modus schaltet und danach wieder in
Produktivmodus versetzt.
Mit den Default-Einstellungen kann man jetzt schon lokal (von localhost aus) gegen den Server connecten. Um Connects von außen zu erlauben, ist es notwendig, einen Anmeldemechanismus und eine Paßwortquelle zu konfigurieren.
INN verwendet intern ein Programm namens “ckpasswd” für die Zugangskontrolle. Dieses Programm kann entweder auf eine lokale Paßwortdatei zugreifen, in der INN-spezifische Paßworte konfiguriert werden, oder man kann es mit Privilegien austatten, die ihm erlauben, auf die Systempaßwortdatei zuzugreifen. Letzteres ist nicht empfohlen, da NNTP ohne weitere Maßnahmen Paßworte im Klartext überträgt.
Welche
Authentisierungsmechanismen in welcher Reihenfolge von INN verwendet
werden, wird in der readers.conf festgelegt. Die folgenden Einträge
legen fest, daß INN die Datei /etc/news/passwd.nnrp verwenden
soll, um Logins zu gestatten. Die Datei hat dasselbe Format wie eine
htpasswd-Datei von Apache und kann mit dem Apache-Programm htpasswd
angelegt und verwaltet werden.
Der Abschnitt auth legt fest, mit welchem Kommando die Anmeldeinformationen geprüft werden sollen, der Abschnitt access legt dann fest, welche Zugriffsrechte diese Benutzer erhalten sollen.
Wenn alles funktioniert, ist nun eine Anmeldung mit Benutzername und Paßwort von entfernten Systemen möglich.
Ein Feed ist eine Verbindung zwischen zwei Newsservern, über die gegenseitig Artikel in bestimmten Newsgroups austauschen. Der Feed besteht aus einer eingehenden Verbindung, die in der incoming.conf konfiguriert wird und einer ausgehenden Verbindung, die in der innfeed.conf definiert wird, und für die in der newsfeeds festgelegt wird, welche Dateien gesendet werden sollen.
In der incoming.conf wird festgelegt, welche entfernten Server dem eigenen Server Daten senden dürfen und welche Gruppen diese Server beschicken dürfen:
Ein
solcher Eintrag gestattet dem entfernten Rechner “koehntopp.de”
bis zu 5 parallele Verbindungen zu dem eigenen Server aufzubauen,
über die er Artikel ausschließlich in die genannten
Gruppen einliefern darf.
Ausgehende Verbindungen werden in die innfeed.conf eingetragen. Analog zur incoming.conf muß dort ein Link für eine ausgehende Verbindung konfiguriert werden.
Schließlich
wird in der Datei newsfeeds festgelegt, welche Daten über die
ausgehende Verbindung gesendet werden sollen.
Die Bestellung für den Channel koehntopp-all aus dem Beispiel liest sich “keine Artikel, die koehntopp.de” im Path haben (“/koehntopp.de”). Das Pattern legt fest, welche Newsgruppen über den Kanal gesendet werden sollen. Es liest sich !* ("nix, gar nix"), @* (auch keine Crossposts, das ist doppelt gemoppelt), de.*,!de.alt.dateien.* (alle de-Gruppen außer de.alt.dateien.*), jedoch keine Artikel mit der Distribution: local. Die Flags und der Kanalname legen fest, daß die Daten über den Kanal innfeed! herausgesendet werden sollen.
Deswegen muß der vordefinierte innfeed!-Kanal in der Datei newsfeeds aktiviert werden.
Außerdem
muß das System Steuernachrichten zur Einrichtung neuer Gruppen,
zum Löschen von Artikeln usw. verarbeiten können. Dazu ist
die Aktivierung des Controlchan notwendig.
Um
die Änderungen wirksam werden zu lassen, muß dem
INN-Server ein “reload”-Kommando gesendet werden.
Wenn
alles funktioniert hat, ist das Link jetzt sichtbar und kann mit
“lsof” oder “tail -f /var/log/news/news
/var/log/news/news.notice” gesehen werden.
Top | Geändert:30-Nov-2008 13:54:06 Url: http://kris.koehntopp.de/artikel/usenet/index.html |